#include "opcode.h"

struct opcode
{
	char *name;
	int code;
};

static struct opcode opcodes [65] = 
{
	{"hlt", HLT},
	{"neg", NEG},
	{"add", ADD},
	{"sub", SUB},
	{"mul", MUL},
	{"div", DIV},
	{"mod", MOD},
	{"and", AND},
	{"or", OR},
	{"xor", XOR},
	{"not", NOT},
	{"sll", SLL},
	{"srl", SRL},
	{"sla", SLA},
	{"sra", SRA},
	{"lt", LT},
	{"gt", GT},
	{"eq", EQ},
	{"ne", NE},
	{"le", LE},
	{"ge", GE},
	{"j", J},
	{"ld", LD},
	{"st", ST},
	{"rd", RD},
	{"wr", WR},
	{"abs", ABS},
	{"ext", EXT},
	{"ldhi", LDHI},
	{"sthi", STHI},
	{"call", CALL},
	{"ji", JI},
	{"sti", STI},
	{"ldi", LDI},
	{"addi", ADDI},
	{"subi", SUBI},
	{"muli", MULI},
	{"divi", DIVI},
	{"modi", MODI},
	{"andi", ANDI},
	{"ori", ORI},
	{"xori", XORI},
	{"slli", SLLI},
	{"srli", SRLI},
	{"slai", SLAI},
	{"srai", SRAI},
	{"lti", LTI},
	{"gti", GTI},
	{"eqi", EQI},
	{"nei", NEI},
	{"lei", LEI},
	{"gei", GEI},
	{"cali", CALI},
	{0,0}
};

int lookup_opcode (char *name)
{
	int i;
	for (i = 0; opcodes [i].name; i ++)
	{
		if (! strcmp (name, opcodes [i].name))
		{
			return opcodes [i].code;
		}
	}
	return -1;
}

